package pers.wensheng.patterns.creator_pattern.factory_pattern.simple_factory_and_config_file_pattern;

import pers.wensheng.patterns.creator_pattern.factory_pattern.simple_factory_and_config_file_pattern.entity.Coffee;

import java.io.InputStream;
import java.util.HashMap;
import java.util.Properties;

/**
 *  静态工厂对象
 *
 */
public class CoffeeFactory {
    //1.定义容器对象存储coffee对象
    private static HashMap<String, Class<Coffee>> map = new HashMap<>();

    //2.加载配置文件，并创建配置文件全类名的对象进行存储，只需要加载一次，可以用静态代码块

    /**
     * 根据 name 加载配置文件，获取配置文件中配置的全类名并创建该对象进行存储
     */
    static {
        Properties properties = new Properties();
        //进行配置文件的加载
        InputStream is = CoffeeFactory.class.getClassLoader().getResourceAsStream("bean.properties");
        try {
            properties.load(is);
            //创建对应的对象并存储在容器中，遍历
            for (Object key : properties.keySet()) {
                String className = properties.getProperty((String) key);
                //通过反射创建对象
                Class<Coffee> clazz = (Class<Coffee>) Class.forName(className);
                //将名称和对象存储到容器中
                map.put((String) key,clazz);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /**
     *  根据name获取map中的对象
     * @param name
     * @return
     */
    public static Coffee createCoffee(String name) throws InstantiationException, IllegalAccessException {
            return map.get(name).newInstance();
    }
}
